TDAArbolBinario

## Interface Tree<E>

- All Superinterfaces:
    java.lang.Iterable<E>

      public interface Tree<E>
      extends java.lang.Iterable<E>

  Interface Tree Es la versión extendida de la interfaz presentada por Goodrich y Tamassia en su cuarta edición. En esta interfaz se incluyen las operaciones necesarias para modificar el árbol.
  Author:
    Cátedra de Estructuras de Datos, Departamento de Cs. e Ing. de la Computación, UNS.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `TDALista.Position<E>` | `addAfter(TDALista.Position<E> p, TDALista.Position<E> lb, E e)` Agrega un nodo con rótulo e como hijo de un nodo padre dado.
    `TDALista.Position<E>` | `addBefore(TDALista.Position<E> p, TDALista.Position<E> rb, E e)` Agrega un nodo con rótulo e como hijo de un nodo padre dado.
    `TDALista.Position<E>` | `addFirstChild(TDALista.Position<E> p, E e)` Agrega un nodo con rótulo e como primer hijo de un nodo dado.
    `TDALista.Position<E>` | `addLastChild(TDALista.Position<E> p, E e)` Agrega un nodo con rótulo e como útimo hijo de un nodo dado.
    `java.lang.Iterable<TDALista.Position<E>>` | `children(TDALista.Position<E> v)` Devuelve una colección iterable de los hijos del nodo correspondiente a una posición dada.
    `void` | `createRoot(E e)` Crea un nodo con rótulo e como raíz del árbol.
    `boolean` | `isEmpty()` Consulta si el árbol está vacío.
    `boolean` | `isExternal(TDALista.Position<E> v)` Consulta si una posición dada corresponde a un nodo externo.
    `boolean` | `isInternal(TDALista.Position<E> v)` Consulta si una posición corresponde a un nodo interno.
    `boolean` | `isRoot(TDALista.Position<E> v)` Consulta si una posición dada corresponde a la raíz del árbol.
    `java.util.Iterator<E>` | `iterator()` Devuelve un iterador de los elementos almacenados en el árbol en preorden.
    `TDALista.Position<E>` | `parent(TDALista.Position<E> v)` Devuelve la posición del nodo padre del nodo correspondiente a una posición dada.
    `java.lang.Iterable<TDALista.Position<E>>` | `positions()` Devuelve una colección iterable de las posiciones de los nodos del árbol.
    `void` | `removeExternalNode(TDALista.Position<E> p)` Elimina el nodo referenciado por una posición dada, si se trata de un nodo externo.
    `void` | `removeInternalNode(TDALista.Position<E> p)` Elimina el nodo referenciado por una posición dada, si se trata de un nodo interno.
    `void` | `removeNode(TDALista.Position<E> p)` Elimina el nodo referenciado por una posición dada.
    `E` | `replace(TDALista.Position<E> v, E e)` Reemplaza el elemento almacenado en la posición dada por el elemento pasado por parámetro.
    `TDALista.Position<E>` | `root()` Devuelve la posición de la raíz del árbol.
    `int` | `size()` Consulta la cantidad de nodos en el árbol.

    - ### Methods inherited from interface java.lang.Iterable

      `forEach, spliterator`

- - ### Method Detail

    - #### size

          int size()

      Consulta la cantidad de nodos en el árbol.
      Returns:
        Cantidad de nodos en el árbol.

    - #### isEmpty

          boolean isEmpty()

      Consulta si el árbol está vacío.
      Returns:
        Verdadero si el árbol está vacío, falso en caso contrario.

    - #### iterator

          java.util.Iterator<E> iterator()

      Devuelve un iterador de los elementos almacenados en el árbol en preorden.
      Specified by:
        `iterator` in interface `java.lang.Iterable<E>`
      Returns:
        Iterador de los elementos almacenados en el árbol.

    - #### positions

          java.lang.Iterable<TDALista.Position<E>> positions()

      Devuelve una colección iterable de las posiciones de los nodos del árbol.
      Returns:
        Colección iterable de las posiciones de los nodos del árbol.

    - #### replace

          E replace(TDALista.Position<E> v,
                    E e)
             throws TDALista.InvalidPositionException

      Reemplaza el elemento almacenado en la posición dada por el elemento pasado por parámetro. Devuelve el elemento reemplazado.
      Parameters:
        `v` - Posición de un nodo.
        `e` - Elemento a reemplazar en la posición pasada por parámetro.
      Returns:
        Elemento reemplazado.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.

    - #### root

          TDALista.Position<E> root()
                             throws EmptyTreeException

      Devuelve la posición de la raíz del árbol.
      Returns:
        Posición de la raíz del árbol.
      Throws:
        `EmptyTreeException` - si el árbol está vacío.

    - #### parent

          TDALista.Position<E> parent(TDALista.Position<E> v)
                               throws TDALista.InvalidPositionException,
                                      TDALista.BoundaryViolationException

      Devuelve la posición del nodo padre del nodo correspondiente a una posición dada.
      Parameters:
        `v` - Posición de un nodo.
      Returns:
        Posición del nodo padre del nodo correspondiente a la posición dada.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.
        `TDALista.BoundaryViolationException` - si la posición pasada por parámetro corresponde a la raíz del árbol.

    - #### children

          java.lang.Iterable<TDALista.Position<E>> children(TDALista.Position<E> v)
                                                     throws TDALista.InvalidPositionException

      Devuelve una colección iterable de los hijos del nodo correspondiente a una posición dada.
      Parameters:
        `v` - Posición de un nodo.
      Returns:
        Colección iterable de los hijos del nodo correspondiente a la posición pasada por parámetro.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.

    - #### isInternal

          boolean isInternal(TDALista.Position<E> v)
                      throws TDALista.InvalidPositionException

      Consulta si una posición corresponde a un nodo interno.
      Parameters:
        `v` - Posición de un nodo.
      Returns:
        Verdadero si la posición pasada por parámetro corresponde a un nodo interno, falso en caso contrario.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.

    - #### isExternal

          boolean isExternal(TDALista.Position<E> v)
                      throws TDALista.InvalidPositionException

      Consulta si una posición dada corresponde a un nodo externo.
      Parameters:
        `v` - Posición de un nodo.
      Returns:
        Verdadero si la posición pasada por parámetro corresponde a un nodo externo, falso en caso contrario.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.

    - #### isRoot

          boolean isRoot(TDALista.Position<E> v)
                  throws TDALista.InvalidPositionException

      Consulta si una posición dada corresponde a la raíz del árbol.
      Parameters:
        `v` - Posición de un nodo.
      Returns:
        Verdadero, si la posición pasada por parámetro corresponde a la raíz del árbol,falso en caso contrario.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.

    - #### createRoot

          void createRoot(E e)
                   throws InvalidOperationException

      Crea un nodo con rótulo e como raíz del árbol.
      Parameters:
        `E` - Rótulo que se asignará a la raíz del árbol.
      Throws:
        `InvalidOperationException` - si el árbol ya tiene un nodo raíz.

    - #### addFirstChild

          TDALista.Position<E> addFirstChild(TDALista.Position<E> p,
                                             E e)
                                      throws TDALista.InvalidPositionException

      Agrega un nodo con rótulo e como primer hijo de un nodo dado.
      Parameters:
        `e` - Rótulo del nuevo nodo.
        `padre` - Posición del nodo padre.
      Returns:
        La posición del nuevo nodo creado.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida o el árbol está vacío.

    - #### addLastChild

          TDALista.Position<E> addLastChild(TDALista.Position<E> p,
                                            E e)
                                     throws TDALista.InvalidPositionException

      Agrega un nodo con rótulo e como útimo hijo de un nodo dado.
      Parameters:
        `e` - Rótulo del nuevo nodo.
        `p` - Posición del nodo padre.
      Returns:
        La posición del nuevo nodo creado.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida o el árbol está vacío.

    - #### addBefore

          TDALista.Position<E> addBefore(TDALista.Position<E> p,
                                         TDALista.Position<E> rb,
                                         E e)
                                  throws TDALista.InvalidPositionException

      Agrega un nodo con rótulo e como hijo de un nodo padre dado. El nuevo nodo se agregará delante de otro nodo también dado.
      Parameters:
        `e` - Rótulo del nuevo nodo.
        `p` - Posición del nodo padre.
        `rb` - Posición del nodo que será el hermano derecho del nuevo nodo.
      Returns:
        La posición del nuevo nodo creado.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida, o el árbol está vacío, o la posición rb no corresponde a un nodo hijo del nodo referenciado por p.

    - #### addAfter

          TDALista.Position<E> addAfter(TDALista.Position<E> p,
                                        TDALista.Position<E> lb,
                                        E e)
                                 throws TDALista.InvalidPositionException

      Agrega un nodo con rótulo e como hijo de un nodo padre dado. El nuevo nodo se agregará a continuación de otro nodo también dado.
      Parameters:
        `e` - Rótulo del nuevo nodo.
        `p` - Posición del nodo padre.
        `lb` - Posición del nodo que será el hermano izquierdo del nuevo nodo.
      Returns:
        La posición del nuevo nodo creado.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida, o el árbol está vacío, o la posición lb no corresponde a un nodo hijo del nodo referenciado por p.

    - #### removeExternalNode

          void removeExternalNode(TDALista.Position<E> p)
                           throws TDALista.InvalidPositionException

      Elimina el nodo referenciado por una posición dada, si se trata de un nodo externo.
      Parameters:
        `n` - Posición del nodo a eliminar.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida o no corresponde a un nodo externo, o el árbol está vacío.

    - #### removeInternalNode

          void removeInternalNode(TDALista.Position<E> p)
                           throws TDALista.InvalidPositionException

      Elimina el nodo referenciado por una posición dada, si se trata de un nodo interno. Los hijos del nodo eliminado lo reemplazan en el mismo orden en el que aparecen. Si el nodo a eliminar es la raíz del árbol, únicamente podrá ser eliminado si tiene un solo hijo, el cual lo reemplazará.
      Parameters:
        `n` - Posición del nodo a eliminar.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida o no corresponde a un nodo interno o corresponde a la raíz (con más de un hijo), o el árbol está vacío.

    - #### removeNode

          void removeNode(TDALista.Position<E> p)
                   throws TDALista.InvalidPositionException

      Elimina el nodo referenciado por una posición dada. Si se trata de un nodo interno. Los hijos del nodo eliminado lo reemplazan en el mismo orden en el que aparecen. Si el nodo a eliminar es la raíz del árbol, únicamente podrá ser eliminado si tiene un solo hijo, el cual lo reemplazará.
      Parameters:
        `n` - Posición del nodo a eliminar.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida o corresponde a la raíz (con más de un hijo), o el árbol está vacío.